﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using log4net;

/// <summary>
/// Descripción breve de TipoTramiteCRN
/// </summary>
namespace Iudicium.Tramites.CRN
{      
    public class TipoTramiteCRN
    {
        private static readonly ILog log = LogManager.GetLogger("LogFile");
     
        public TipoTramiteCRN()
        {
            //
            // TODO: Agregar aquí la lógica del constructor
            //
        }

        public static int InsertTipoTramite(TipoTramite objTipoTramite)
        {
            if (objTipoTramite == null)
            {
                throw new ArgumentException("el tipotramite no puede ser nulo.");
            }
            if (string.IsNullOrEmpty(objTipoTramite.Descripcion))
            {
                throw new ArgumentException("La descripcion del tipotamite no puede ser nulo o vacio");
            }

            if(objTipoTramite.CategoriaTramiteId<=0)
            {
                throw new ArgumentException("el tipotramiteid no puede ser menor o igual a cero");
            }

            int? tipoTramiteId = 0;

            TipoTramiteDSTableAdapters.TipoTramiteTableAdapter adapter = 
                new TipoTramiteDSTableAdapters.TipoTramiteTableAdapter();

            adapter.Insert(ref tipoTramiteId, objTipoTramite.Descripcion, objTipoTramite.CategoriaTramiteId);

            if (tipoTramiteId == null)
            {
                throw new Exception("La sentencia SQL se ejecuto correctamente pero no se genero la llave primaria");
            }

            return tipoTramiteId.Value;
        }

        public static void UpdateTipoTramite(TipoTramite objTipoTramite)
        {
            if (objTipoTramite == null)
            {
                throw new ArgumentException("el tipotramite no puede ser nula.");
            }
            if (objTipoTramite.TipoTramiteId <= 0)
            {
                throw new ArgumentException("tipotramiteId no puede ser menor o igual que cero.");
            }
            if (string.IsNullOrEmpty(objTipoTramite.Descripcion))
            {
                throw new ArgumentException("La descripcion del tipotramite no puede ser nula o vacia");
            } 
            if (objTipoTramite.CategoriaTramiteId <= 0)
            {
                throw new ArgumentException("CategoriatramiteId no puede ser menor o igual que cero.");
            }
            TipoTramiteDSTableAdapters.TipoTramiteTableAdapter adpater =
                   new TipoTramiteDSTableAdapters.TipoTramiteTableAdapter();

            adpater.Update(objTipoTramite.TipoTramiteId, objTipoTramite.Descripcion,objTipoTramite.CategoriaTramiteId);

        }

        public static void DeleteTipoTramite(int TipoTramiteId)
        {
            if (TipoTramiteId <= 0)
            {
                throw new ArgumentException("TipotramiteId no puede ser menor o igual que cero.");
            }
            TipoTramiteDSTableAdapters.TipoTramiteTableAdapter adpater =
                  new TipoTramiteDSTableAdapters.TipoTramiteTableAdapter();

            adpater.Delete(TipoTramiteId);

        }

        public static TipoTramite GetTipoTramiteById(int TipoTramiteId,int CategoriaTramiteId)
        {
            if (TipoTramiteId <= 0)
            {
                throw new ArgumentException("TipotramiteId no puede ser menor o igual que cero.");
            }

            TipoTramiteDSTableAdapters.TipoTramiteTableAdapter adpater =
                new TipoTramiteDSTableAdapters.TipoTramiteTableAdapter();

            TipoTramiteDS.TipoTramiteDataTable tabla =
                adpater.GetTipoTramiteById(TipoTramiteId,CategoriaTramiteId);

            if (tabla == null || tabla.Rows.Count == 0)
            {
                throw new Exception("No se pudo obtener el tipo " + TipoTramiteId + " de la base de datos");
            }
            return ConstruirTipoTramite(tabla[0],CategoriaTramiteId);
        }

        public static List<TipoTramite> GetTipoTramiteBySearch(string parametro,string categoriaId)
        {
            int aux = Convert.ToInt32(categoriaId);
            List<TipoTramite> lista = new List<TipoTramite>();

            TipoTramiteDSTableAdapters.TipoTramiteTableAdapter adpater =
                  new TipoTramiteDSTableAdapters.TipoTramiteTableAdapter();

            TipoTramiteDS.TipoTramiteDataTable tabla =
                adpater.GetTipoTramiteBySeacrh(parametro,aux);

            if (tabla == null)
            {
                throw new Exception("No se pudo obtener resultados de la busqueda con el parametro " +
                    parametro +
                    " de la base de datos");
            }

            foreach (TipoTramiteDS.TipoTramiteRow row in tabla)
            {
                TipoTramite obj = ConstruirTipoTramite(row,aux);
                if (obj != null)
                    lista.Add(obj);
            }
            return lista;
        }

        public static TipoTramite ConstruirTipoTramite(TipoTramiteDS.TipoTramiteRow row,int categoriaId)
        {
            if (row == null)
                return null;
            return new TipoTramite(row.tipoTramiteId, row.descripcion,categoriaId);

        }
    }
}